// #include <stdio.h>
// #include <stdlib.h>
// #include <stdbool.h>
//
// #include "Address Book(SeqList)/SeqList.h"
//
// typedef struct Node {
//     int data;           // 数据域
//     struct Node* next;  // 指针域
// } Node, *LinkList;      // LinkList为头指针类型
//
// Node* CreateNode(int data) {
//     Node* newNode = (Node*)malloc(sizeof(Node));
//     if (!newNode) {
//         perror("Memory allocation failed");
//         exit(EXIT_FAILURE);
//     }
//     newNode->data = data;
//     newNode->next = NULL;
//     return newNode;
// }
//
// void InsertAtTail(LinkList* L, int data) {
//     Node* newNode = CreateNode(data);
//
//     if (*L == NULL) {  // 空链表情况
//         *L = newNode;
//     } else {
//         Node* p = *L;
//         while (p->next != NULL) {
//             p = p->next;
//         }
//         p->next = newNode;
//     }
// }
//
// void InsertAtHead(LinkList* L, int data) {
//     Node* newNode = CreateNode(data);
//     newNode->next = *L;
//     *L = newNode;  // 更新头指针
// }
//
// bool InsertAtIndex(LinkList* L, int index, int data) {
//     if (index < 0) return false;
//
//     if (index == 0) {  // 头部插入
//         InsertAtHead(L, data);
//         return true;
//     }
//
//     Node* p = *L;
//     for (int i = 0; p != NULL && i < index - 1; i++) {
//         p = p->next;
//     }
//
//     if (p == NULL) return false;  // 越界
//
//     Node* newNode = CreateNode(data);
//     newNode->next = p->next;
//     p->next = newNode;
//     return true;
// }
//
// bool DeleteNode(LinkList* L, int data) {
//     if (*L == NULL) return false;
//
//     // 处理头节点删除
//     if ((*L)->data == data) {
//         Node* temp = *L;
//         *L = (*L)->next;
//         free(temp);
//         return true;
//     }
//
//     Node *prev = *L, *curr = (*L)->next;
//     while (curr != NULL) {
//         if (curr->data == data) {
//             prev->next = curr->next;
//             free(curr);
//             return true;
//         }
//         prev = curr;
//         curr = curr->next;
//     }
//     return false;
// }
//
// Node* FindNode(LinkList L, int data) {
//     Node* p = L;
//     while (p != NULL) {
//         if (p->data == data) {
//             return p;
//         }
//         p = p->next;
//     }
//     return NULL;
// }
//
// int GetLength(LinkList L) {
//     int len = 0;
//     Node* p = L;
//     while (p != NULL) {
//         len++;
//         p = p->next;
//     }
//     return len;
// }
//
// void PrintList(LinkList L) {
//     Node* p = L;
//     while (p != NULL) {
//         printf("%d -> ", p->data);
//         p = p->next;
//     }
//     printf("NULL\n");
// }
//
// void DestroyList(LinkList* L) {
//     Node* p = *L;
//     while (p != NULL) {
//         Node* temp = p;
//         p = p->next;
//         free(temp);
//     }
//     *L = NULL;  // 置头指针为NULL
// }
//
// void MaxHe(LinkList L) {
//     if(L==NULL) {
//         return;
//     }
//     //快慢指针
//     Node* slow=L;
//     Node* fast=L;
//     while (fast!=NULL&&fast->next!=NULL) {
//         slow=slow->next;
//         fast=fast->next->next;
//     }
//     //后半部分逆置
//     Node* prev=NULL;
//     Node* curr=slow;
//     while (curr!=NULL) {
//         Node* next=curr->next;
//         curr->next=prev;
//         prev=curr;
//         curr=next;
//     }
//     //计算
//     Node* first=L;
//     Node* last=prev;
//     int maxnum=-1;
//     while (first!=slow&&last!=NULL) {
//         int num = first->data + last->data;
//         if (num > maxnum) {
//             maxnum = num;
//         }
//         first = first->next;
//         last = last->next;
//     }
//     printf("最大孪生和为:%d\n",maxnum);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkList L=NULL;
//     InsertAtTail(&L,10);
//     InsertAtTail(&L,20);
//     InsertAtTail(&L,30);
//     InsertAtTail(&L,40);
//     InsertAtTail(&L,50);
//     InsertAtTail(&L,60);
//     PrintList(L);
//     MaxHe(L);
//     DestroyList(&L);
//     return 0;
// }